package com.smh.aiagent.rag;

import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.advisor.RetrievalAugmentationAdvisor;
import org.springframework.ai.chat.client.advisor.api.Advisor;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.ai.rag.generation.augmentation.ContextualQueryAugmenter;
import org.springframework.ai.rag.retrieval.search.VectorStoreDocumentRetriever;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author shiminghui
 * @date 2025/6/3 14:49
 * @description: 设置一个处理空上下文的Advisor
 */
@Configuration
public class LoveEmptyContextAdvisorConfig {

    @Resource
    private VectorStore loveAppVectorStore;

    @Bean
    public Advisor loveEmptyContextAdvisor() {

        return RetrievalAugmentationAdvisor
                .builder()
                .documentRetriever(VectorStoreDocumentRetriever
                        .builder()
                        .similarityThreshold(0.5) //  设置相似度阈值
                        .vectorStore(loveAppVectorStore)
                        .topK(5)
                        .build())
                .queryAugmenter(ContextualQueryAugmenter
                        .builder()
                        .allowEmptyContext(false) // 设置是否允许空上下文
                        .emptyContextPromptTemplate(new PromptTemplate("超出知识库的范围,请你回答:\n抱歉,我不知道."))
                        .build())
                .build();

        /**
         * 这里允许上下文为空的话,其实就是什么也不操作,即不会添加上下文参数
         * 如果不允许上下文为空的话,就是告知AI输出 我不知道
         */
    }

}
